package com.inspur.dgov.common.tool.utils;

import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import cn.hutool.crypto.symmetric.SM4;

/**
 * 国密加解密
 *
 * @Author chiyupei
 * @Date 20/6/3 上午10:04
 * @Version 1.0
 * @Description 国密加解密
 */
public class SMUtil {

    //默认加密密钥
    public static final String DEFAULT_SM4_KEY = "com.inspur.dgov@";

    /**
     * SM3加密
     * @param value
     * @return
     */
    public static String sm3Encrypt(String value) {
        return SmUtil.sm3(value);
    }

    /**
     * SM4加密
     * @param value
     * @return
     */
    public static String sm4Encrypt(String value) {
        String hexKey = HexUtil.encodeHexStr(DEFAULT_SM4_KEY);
        byte[] key = HexUtil.decodeHex(hexKey);
        SymmetricCrypto sm4 = new SM4(Mode.CBC, Padding.PKCS5Padding, key, key);
        return sm4.encryptHex(value);
    }

    /**
     * SM4解密
     * @param value
     * @return
     */
    public static String sm4Decrypt(String value) {
        String hexKey = HexUtil.encodeHexStr(DEFAULT_SM4_KEY);
        byte[] key = HexUtil.decodeHex(hexKey);
        SymmetricCrypto sm4 = new SM4(Mode.CBC, Padding.PKCS5Padding, key, key);
        return sm4.decryptStr(value);
    }
//
//    public static void main(String[] args) {
//        String value = "我是迟钰沛";
//        String envalue = SMUtil.sm4Encrypt(value);
//        System.out.println(envalue);
//        System.out.println(SMUtil.sm4Decrypt(envalue));
//    }
}
